using System;
using System.Collections.Generic;
using System.Text;
using NEXEntidad;
using NEXServicio;
using System.Data;

namespace NEXEntidad
{
    #region Comentario

    public class Comentario : NEXEntidadElemento
    {
        #region Constructores
        public Comentario(int idComentario)
            : base(idComentario)
        {
            this.Id = idComentario;
        }
        public Comentario()
            : base()
        {
        }
        #endregion

        #region Campos / Propiedades

        private Usuario fUsuario;
        public Usuario Usuario
        {
            get { return fUsuario; }
            set { fUsuario = value; }
        }

        private string fDetalle;
        public string Detalle
        {
            get { return fDetalle; }
            set { fDetalle = value; }
        }

        private DateTime? fFecha;
        public DateTime? Fecha
        {
            get { return fFecha; }
            set { fFecha = value; }
        }

        private Libro fLibro;
        public Libro Libro
        {
            get { return fLibro; }
            set { fLibro = value; }
        }

        private ComentarioCollection fRespuestas;
        public ComentarioCollection Respuestas
        {
            get { return fRespuestas; }
            set { fRespuestas = value; }
        }
        #endregion

        #region Metodos de Carga
        private static void Cargar(Comentario comentario, DataRow drComentario)
        {
            comentario.Id = Convert.ToInt32(drComentario["IdComentario"].ToString(), System.Globalization.CultureInfo.CurrentCulture);
            comentario.Descripcion = drComentario["descripcion"].ToString();
            comentario.Fecha = (drComentario["Fecha"] != DBNull.Value) ? (DateTime?)drComentario["Fecha"] : null;
            comentario.Usuario = Usuario.CrearCargadoCompleto(drComentario, true);

            comentario.ObjetoCargado();
        }
        private static Comentario CrearCargado(DataRow drComentario)
        {
            Comentario comentario = new Comentario(Convert.ToInt32(drComentario["idComentario"].ToString()));
            Comentario.Cargar(comentario, drComentario);
            return comentario;
        }
        internal static ComentarioCollection CrearListaCargada(DataRowCollection drComentarios)
        {
            ComentarioCollection comentarios = new ComentarioCollection();
            foreach (DataRow drComentario in drComentarios)
            {
                comentarios.Add(Comentario.CrearCargado(drComentario));
            }
            return comentarios;
        }
        protected override void Obtener()
        {
            throw new Exception("The method or operation is not implemented.");
        }
        #endregion

        #region Metodos Publicos
        public static ComentarioCollection Listar(int idLibro,bool limitar)
        {
            return Comentario.CrearListaCargada(ServicioComentario.Listar(idLibro, limitar).Tables[ServicioComentario.DataTableName].Rows);
        }
        #endregion

        #region Metodos para Salvar
        protected override int SalvarObjeto(NEX_Datos.Transaccion transaccion)
        {
            Int32 idComentario = ServicioComentario.Salvar(transaccion, this.Id, this.Descripcion, this.Fecha, null, this.Usuario.Id, this.Libro.Id, this.EsInsert);
            return idComentario;
        }
        #endregion
    }
    #endregion

    #region ComentarioCollection

    [Serializable]
    public class ComentarioCollection : NEXCollection<Comentario>
    {
    }
    #endregion
}
